/**
 * electron 利用qq工具截图
 * 个人练习 严禁商用
 * 介绍一个vue截图插件 js-web-screen-shot
 * */
// node js导入函数创建子进程来执行外部命令或应用程序
// execFile接收可执行文件和参数数组
// exec直接使用字符串命令
// spawn以流式方式处理输入输出
const { execFile, exec, spawn } = require('child_process')
const path = require('path')
const { clipboard } = require('electron')

// 获取exe路径(本地与打包后路径问题) 配合package.json的extraResources模块
function getExePath() {
  const basePath = process.env.NODE_ENV === 'development'
    ? path.resolve(__dirname, '../../public/qqScreenShot')
    : path.join(process.resourcesPath, 'app.asar.unpacked/public/qqScreenShot')
  return path.join(basePath, 'PrintScr.exe')
}
module.exports = {
  //windows截图方法
  screenWindow: (mainWin) => {
    // const url = path.resolve(__dirname, '../../public/qqScreenShot/PrintScr.exe')
    // const screen_window = execFile(url)
    // screen_window.on('exit', (code) => {
    //   if (code && mainWin) {
    //     const pngs = clipboard.readImage().toPNG()
    //     const imgs = 'data:image/png;base64,' + pngs.toString('base64')
    //     mainWin.webContents.send('captureScreenBack', imgs)
    //   }
    // })
    try {
      const exePath = getExePath()
      const screenProcess = spawn(exePath, [], {
        stdio: 'ignore',
        windowsHide: true
      })
      screenProcess.on('error', (err) => {
        console.error('执行截图工具失败:', err)
        mainWin?.webContents.send('captureError', err.message)
      })
      screenProcess.on('exit', (code) => {
        if (code && mainWin) {
          const pngs = clipboard.readImage().toPNG()
          const imgs = 'data:image/png;base64,' + pngs.toString('base64')
          mainWin.webContents.send('captureScreenBack', imgs)
        }
      })
    } catch (error) {
      console.error('截图初始化失败:', error)
    }
  },
  //mac截图方法
  handleScreenShots: (mainWin) => {
    exec('screencapture -i -U -c', (error, stdout, stderr) => {
      console.log('308', error, stdout, stderr)
      const pngs = clipboard.readImage().toPNG()
      const imgs = 'data:image/png;base64,' + pngs.toString('base64')
      mainWin.webContents.send('captureScreenBack', imgs)
    })
  }
}
